﻿#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
#include <time.h>

//树的结构
struct TreeNode
{
    struct TreeNode* child; // 左边开始的第⼀个孩⼦结点
    struct TreeNode* brother; // 指向其右边的下⼀个兄弟结点
    int data; // 结点中的数据域
};

//定义堆结构
typedef int HPDataType;
typedef struct Heap 
{
	HPDataType* arr;
	int size;    //有效数据个数
	int capaicty;//空间大小
}HP;

//初始化
void HPInit(HP* php);//也是，要改变指向的对象，取地址

//销毁
void HPDesTroy(HP* php);

//打印堆
void HPPrint(HP* php);

//交换父子算法
void Swap(int* x, int* y);

//向上调整算法
void AdjustUp(HPDataType* arr, int child);

//向下调整算法
void AdjustDown(HPDataType* arr, int parent, int n);

//入堆
void HPPush(HP* php, HPDataType x);

//判断堆空
bool HPEmpty(HP* php);

//出堆（堆顶）
void HPPop(HP* php);

//取堆顶
HPDataType HPTop(HP* php);
HPDataType HPTop(HP* php);